Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

320
Vistas
Docker: habilite la API HTTP remota con SystemD y "daemon.json"

Descargo de responsabilidad:

En una máquina antigua con Ubuntu 14.04 con Upstart como sistema de inicio, he habilitado la API HTTP definiendo DOCKER_OPTS en /etc/default/docker . Funciona.

 $ docker version Client: Version: 1.11.2 (...) Server: Version: 1.11.2 (...)

Problema:

Esta solución no funciona en una máquina reciente con Ubuntu 16.04 con SystemD.

Como se indica en la parte superior del archivo reciente instalado /etc/default/docker :

 # Docker Upstart and SysVinit configuration file # # THIS FILE DOES NOT APPLY TO SYSTEMD # # Please see the documentation for "systemd drop-ins": # https://docs.docker.com/engine/articles/systemd/ # (...)

Como verifiqué esta información en la página de documentación de Docker para SystemD, necesito completar un archivo daemon.json , pero como se indica en la referencia , hay algunas propiedades que se explican por sí mismas, pero otras podrían no estar explicadas.

Dicho esto, estoy buscando ayuda para convertir esto:

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -G myuser --debug"

al objeto daemon.json ?


notas

PS1: soy consciente de que el daemon.json tiene una debug: true por defecto.

PS2: Probablemente el group: "myuser" funcionará así o con una matriz de cadenas.

PS3: Mi principal preocupación es usar SOCK y HTTP simultáneamente.


EDITAR (8/08/2017) Después de leer la respuesta aceptada, verifique la respuesta de @white_gecko para obtener más información sobre el asunto.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Con mucha documentación fragmentada era difícil resolver esto.

Mi primera solución fue crear el daemon.json con

 { "hosts": [ "unix:///var/run/docker.sock", "tcp://127.0.0.1:2376" ] }

Esto no funcionó con este error docker[5586]: unable to configure the Docker daemon with file /etc/docker/daemon.json después de intentar reiniciar el demonio con service docker restart . Nota: Había más sobre el error que no pude copiar.

Pero lo que este error significaba al principio era que el daemon era un conflicto con un indicador y configuraciones en daemon.json .

Cuando lo investigué con service docker status este era el proceso principal: ExecStart=/usr/bin/docker daemon -H fd:// .

Lo que fue extraño porque es diferente con las configuraciones en /etc/init.d/docker que pensé que eran las configuraciones del servicio. La parte extraña fue que el archivo en init.d no contiene ninguna referencia al argumento daemon ni -H fd:// .

Después de algunas investigaciones y muchas búsquedas de los directorios del sistema, descubrí estos directorios (con ayuda en la discusión sobre este problema, problema de docker github # 22339 ).

Solución

Editado el ExecStart de /lib/systemd/system/docker.service con este nuevo valor: /usr/bin/docker daemon

Y creó /etc/docker/daemon.json con

 { "hosts": [ "fd://", "tcp://127.0.0.1:2376" ] }

Finalmente reinicié el servicio con service docker start del servicio y ahora obtengo la "luz verde" en el service docker status .

Probé las nuevas configuraciones con:

 $ docker run hello-world Hello from Docker! (...)

Y,

 $ curl http://127.0.0.1:2376/v1.23/info [JSON]

¡Espero que esto ayude a alguien con un problema similar al mío! :)

about 4 years ago · Santiago Trujillo Denunciar

0

Tuve el mismo problema y, en realidad, en mi opinión, la solución más fácil que no debería tocar ningún archivo existente, que es administrado por el proceso de actualización del sistema, es usar un complemento systemd: simplemente cree un archivo /etc/systemd/system/docker.service que sobrescribe la parte específica del servicio en /lib/systemd/system/docker.service .

En este caso el contenido de /etc/systemd/system/docker.service sería:

 [Service] ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H=tcp://127.0.0.1:2375 -H=fd://

(Incluso podría crear un directorio docker.service.d que contenga varios archivos para sobrescribir diferentes parámetros).

Después de agregar el archivo, simplemente ejecute:

 $ sudo systemctl daemon-reload $ sudo systemctl restart docker
about 4 years ago · Santiago Trujillo Denunciar

0

La solución descrita en https://docs.docker.com/engine/admin/#troubleshoot-conflicts- between -the-daemonjson-and-startup-scripts funciona para mí:

Un ejemplo notable de un conflicto de configuración que es difícil de solucionar es cuando desea especificar una dirección de daemon diferente a la predeterminada. Docker escucha en un socket de forma predeterminada. En los sistemas Debian y Ubuntu que usan systemd ), esto significa que siempre se usa un indicador -H al iniciar dockerd . Si especifica una entrada de hosts en daemon.json , esto provoca un conflicto de configuración (como en el mensaje anterior) y Docker no se inicia.

Para solucionar este problema, cree un nuevo archivo /etc/systemd/system/docker.service.d/docker.conf con el siguiente contenido, para eliminar el argumento -H que se usa al iniciar el demonio de forma predeterminada.

 [Service] ExecStart= ExecStart=/usr/bin/dockerd

Tenga en cuenta que la línea con ExecStart= es realmente necesaria; de lo contrario, fallará con el error:

docker.service: el servicio tiene más de una configuración ExecStart=, que solo está permitida para los servicios Type=oneshot. Negarse.

Luego de crear el archivo debes ejecutar:

 sudo systemctl daemon-reload sudo systemctl restart docker
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda